package com.example.communist_app_api.exception;


import com.example.communist_app_api.util.R;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * 全局异常处理类。
 * 使用 slf4j 保存日志信息。
 * 此处使用了 统一结果处理 类 Result 用于包装异常信息。
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {


//    /**
//     * 处理 Exception 异常
//     * @param e 异常
//     * @return 处理结果
//     */
//    @ExceptionHandler(value = RuntimeException.class)
//    public R handler(RuntimeException e){
//        log.error("运行时异常：----------------{}", e.getMessage());
//        System.out.println("运行时异常：");
//        return R.error(e.getMessage());
//    }


    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 处理 Exception 异常
     * @param e 异常
     * @return 处理结果
     */
    @ExceptionHandler(Exception.class)
    public R handlerException(Exception e) {
        logger.error(e.getMessage(), e);
        return R.error("系统异常");
    }

    /**
     * 处理空指针异常
     * @param e 异常
     * @return 处理结果
     */
    @ExceptionHandler(NullPointerException.class)
    public R handlerNullPointerException(NullPointerException e) {
        logger.error(e.getMessage(), e);
        return R.error("空指针异常");
    }

    /**
     * 处理自定义异常
     * @param e 异常
     * @return 处理结果
     */
    @ExceptionHandler(GlobalException.class)
    public R handlerGlobalException(GlobalException e) {
        logger.error(e.getMessage(), e);
        return R.error(e.getMessage());
    }
}
